package com.magist.core.service;

import com.github.pagehelper.PageInfo;
import com.magist.core.entity.BaseEntity;
import com.magist.core.entity.Page;
import tk.mybatis.mapper.entity.Example;

import java.util.Collection;
import java.util.List;

public interface BaseService<T extends BaseEntity> {
	/**
	 * 批量插入数据。
	 * 
	 * @param entities
	 */
    void insert(Collection<T> entities);

	/**
	 * 批量更新数据，暂不支持乐观锁。
	 * 
	 * @param entities
	 */
    void update(Collection<T> entities);
	
	
	/**
	 * 插入数据实体
	 * 
	 * @param entity
	 *            数据实体
	 * @return 影响行数
	 */
    int insert(T entity);

	/**
	 * 伪删除数据实体，支持乐观锁。
	 * 
	 * @param entity
	 *            数据实体
	 * @return 影响行数
	 */
    int delete(T entity);

	/**
	 * 更新数据实体
	 * 
	 * @param entity
	 *            数据实体
	 * @return 影响行数
	 */
    int update(T entity);

	/**
	 * 根据标识查询数据实体
	 *
	 * @param id
	 *            数据标识
	 * @return
	 */
    T getById(String id);

	/**
	 * 根据条件查询数据对象。
	 *
	 * @return
	 */
    List<T> find(Example example);

	/**
	 * 根据查询列表
	 * @param entity
	 * @return
	 */
	List<T> find(T entity);
	/**
	 * 查找单条数据
	 * @return
	 */
    T findSingle(T entity);

	/**
	 * 查找最后一条数据
	 * @return
	 */
	T findLast(T entity);

	/**
	 * 分页方法
	 * @param entity
	 * @param page
	 * @return
	 */
	PageInfo<T> page(T entity,Page page);
	
	/**
	 * 获取新的序列值
	 * @param step 步长
	 * @return
	 */
    String getNewId(Long step);
	/**
	 * 获取新和序列值
	 * @return
	 */
    String getNewId();
}
